1 module mruby; 2 3 import mruby.value; 4 import mruby.proc; 5 import mruby.mrb_class; 6 import mruby.object; 7 import mruby.variable; 8 import mruby.gc; 9 10 import core.stdc.config; 11 12 extern (C): 13 14 alias uint mrb_code; 15 alias uint mrb_aspec; 16 alias void* function (mrb_state*, void*, c_ulong, void*) mrb_allocf; 17 alias _Anonymous_0 mrb_callinfo; 18 alias void function (mrb_state*) mrb_atexit_func; 19 alias mrb_value function (mrb_state*, mrb_value) mrb_func_t; 20 21 struct alloca_header; 22 struct kh_n2s; 23 struct symbol_name; 24 25 enum mrb_fiber_state 26 { 27 MRB_FIBER_CREATED = 0, 28 MRB_FIBER_RUNNING = 1, 29 MRB_FIBER_RESUMING = 2, 30 MRB_FIBER_SUSPENDED = 3, 31 MRB_FIBER_TRANSFERRED = 4, 32 MRB_FIBER_TERMINATED = 5 33 } 34 35 enum GC_state 36 { 37 GC_STATE_ROOT = 0, 38 GC_STATE_MARK = 1, 39 GC_STATE_SWEEP = 2 40 } 41 42 enum call_type 43 { 44 CALL_PUBLIC = 0, 45 CALL_FCALL = 1, 46 CALL_VCALL = 2, 47 CALL_TYPE_MAX = 3 48 } 49 50 struct _Anonymous_0 51 { 52 mrb_sym mid; 53 RProc* proc; 54 mrb_value* stackent; 55 int nregs; 56 int ridx; 57 int eidx; 58 REnv* env; 59 mrb_code* pc; 60 mrb_code* err; 61 int argc; 62 int acc; 63 RClass* target_class; 64 } 65 66 struct mrb_context 67 { 68 mrb_context* prev; 69 mrb_value* stack; 70 mrb_value* stbase; 71 mrb_value* stend; 72 mrb_callinfo* ci; 73 mrb_callinfo* cibase; 74 mrb_callinfo* ciend; 75 mrb_code** rescue; 76 int rsize; 77 RProc** ensure; 78 int esize; 79 enum mrb_fiber_state 80 { 81 MRB_FIBER_CREATED = 0, 82 MRB_FIBER_RUNNING = 1, 83 MRB_FIBER_RESUMING = 2, 84 MRB_FIBER_SUSPENDED = 3, 85 MRB_FIBER_TRANSFERRED = 4, 86 MRB_FIBER_TERMINATED = 5 87 } 88 mrb_fiber_state status; 89 RFiber* fib; 90 } 91 92 struct mrb_state 93 { 94 mrb_jmpbuf* jmp; 95 mrb_allocf allocf; 96 void* allocf_ud; 97 mrb_context* c; 98 mrb_context* root_c; 99 RObject* exc; 100 iv_tbl* globals; 101 RObject* top_self; 102 RClass* object_class; 103 RClass* class_class; 104 RClass* module_class; 105 RClass* proc_class; 106 RClass* string_class; 107 RClass* array_class; 108 RClass* hash_class; 109 RClass* float_class; 110 RClass* fixnum_class; 111 RClass* true_class; 112 RClass* false_class; 113 RClass* nil_class; 114 RClass* symbol_class; 115 RClass* kernel_module; 116 heap_page* heaps; 117 heap_page* sweeps; 118 heap_page* free_heaps; 119 size_t live; 120 RBasic** arena; 121 int arena_capa; 122 int arena_idx; 123 GC_state gc_state; 124 int current_white_part; 125 RBasic* gray_list; 126 RBasic* atomic_gray_list; 127 size_t gc_live_after_mark; 128 size_t gc_threshold; 129 int gc_interval_ratio; 130 int gc_step_ratio; 131 mrb_bool gc_disabled; 132 mrb_bool gc_full; 133 mrb_bool is_generational_gc_mode; 134 mrb_bool out_of_memory; 135 size_t majorgc_old_threshold; 136 alloca_header* mems; 137 mrb_sym symidx; 138 kh_n2s* name2sym; 139 symbol_name* symtbl; 140 size_t symcapa; 141 RClass* eException_class; 142 RClass* eStandardError_class; 143 RObject* nomem_err; 144 void* ud; 145 mrb_atexit_func* atexit_stack; 146 mrb_int atexit_stack_len; 147 } 148 149 struct mrb_jmpbuf; 150 151 152 struct mrb_irep; 153 154 155 struct mrb_pool; 156 157 158 RClass* mrb_define_class (mrb_state*, const(char)*, RClass*); 159 RClass* mrb_define_module (mrb_state*, const(char)*); 160 mrb_value mrb_singleton_class (mrb_state*, mrb_value); 161 void mrb_include_module (mrb_state*, RClass*, RClass*); 162 void mrb_define_method (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec); 163 void mrb_define_class_method (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec); 164 void mrb_define_singleton_method (mrb_state*, RObject*, const(char)*, mrb_func_t, mrb_aspec); 165 void mrb_define_module_function (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec); 166 void mrb_define_const (mrb_state*, RClass*, const(char)* name, mrb_value); 167 void mrb_undef_method (mrb_state*, RClass*, const(char)*); 168 void mrb_undef_class_method (mrb_state*, RClass*, const(char)*); 169 mrb_value mrb_obj_new (mrb_state* mrb, RClass* c, mrb_int argc, const(mrb_value)* argv); 170 mrb_value mrb_instance_new (mrb_state* mrb, mrb_value cv); 171 RClass* mrb_class_new (mrb_state* mrb, RClass* super_); 172 RClass* mrb_module_new (mrb_state* mrb); 173 mrb_bool mrb_class_defined (mrb_state* mrb, const(char)* name); 174 RClass* mrb_class_get (mrb_state* mrb, const(char)* name); 175 RClass* mrb_class_get_under (mrb_state* mrb, RClass* outer, const(char)* name); 176 RClass* mrb_module_get (mrb_state* mrb, const(char)* name); 177 RClass* mrb_module_get_under (mrb_state* mrb, RClass* outer, const(char)* name); 178 mrb_value mrb_notimplement_m (mrb_state*, mrb_value); 179 mrb_value mrb_obj_dup (mrb_state* mrb, mrb_value obj); 180 mrb_value mrb_check_to_integer (mrb_state* mrb, mrb_value val, const(char)* method); 181 mrb_bool mrb_obj_respond_to (mrb_state* mrb, RClass* c, mrb_sym mid); 182 RClass* mrb_define_class_under (mrb_state* mrb, RClass* outer, const(char)* name, RClass* super_); 183 RClass* mrb_define_module_under (mrb_state* mrb, RClass* outer, const(char)* name); 184 185 mrb_aspec MRB_ARGS_NONE() 186 { 187 return cast(mrb_aspec)0; 188 } 189 190 mrb_int mrb_get_args (mrb_state* mrb, const(char)* format, ...); 191 mrb_value mrb_funcall (mrb_state*, mrb_value, const(char)*, mrb_int, ...); 192 mrb_value mrb_funcall_argv (mrb_state*, mrb_value, mrb_sym, mrb_int, const(mrb_value)*); 193 mrb_value mrb_funcall_with_block (mrb_state*, mrb_value, mrb_sym, mrb_int, const(mrb_value)*, mrb_value); 194 mrb_sym mrb_intern_cstr (mrb_state*, const(char)*); 195 mrb_sym mrb_intern (mrb_state*, const(char)*, size_t); 196 mrb_sym mrb_intern_static (mrb_state*, const(char)*, size_t); 197 mrb_sym mrb_intern_str (mrb_state*, mrb_value); 198 mrb_value mrb_check_intern_cstr (mrb_state*, const(char)*); 199 mrb_value mrb_check_intern (mrb_state*, const(char)*, size_t); 200 mrb_value mrb_check_intern_str (mrb_state*, mrb_value); 201 const(char)* mrb_sym2name (mrb_state*, mrb_sym); 202 const(char)* mrb_sym2name_len (mrb_state*, mrb_sym, mrb_int*); 203 mrb_value mrb_sym2str (mrb_state*, mrb_sym); 204 void* mrb_malloc (mrb_state*, size_t); 205 void* mrb_calloc (mrb_state*, size_t, size_t); 206 void* mrb_realloc (mrb_state*, void*, size_t); 207 void* mrb_realloc_simple (mrb_state*, void*, size_t); 208 void* mrb_malloc_simple (mrb_state*, size_t); 209 RBasic* mrb_obj_alloc (mrb_state*, mrb_vtype, RClass*); 210 void mrb_free (mrb_state*, void*); 211 mrb_value mrb_str_new (mrb_state* mrb, const(char)* p, size_t len); 212 mrb_value mrb_str_new_cstr (mrb_state*, const(char)*); 213 mrb_value mrb_str_new_static (mrb_state* mrb, const(char)* p, size_t len); 214 mrb_state* mrb_open (); 215 mrb_state* mrb_open_allocf (mrb_allocf, void* ud); 216 mrb_state* mrb_open_core (mrb_allocf, void* ud); 217 void mrb_close (mrb_state*); 218 void* mrb_default_allocf (mrb_state*, void*, size_t, void*); 219 mrb_value mrb_top_self (mrb_state*); 220 mrb_value mrb_run (mrb_state*, RProc*, mrb_value); 221 mrb_value mrb_toplevel_run (mrb_state*, RProc*); 222 mrb_value mrb_context_run (mrb_state*, RProc*, mrb_value, uint); 223 void mrb_p (mrb_state*, mrb_value); 224 mrb_int mrb_obj_id (mrb_value obj); 225 mrb_sym mrb_obj_to_sym (mrb_state* mrb, mrb_value name); 226 mrb_bool mrb_obj_eq (mrb_state*, mrb_value, mrb_value); 227 mrb_bool mrb_obj_equal (mrb_state*, mrb_value, mrb_value); 228 mrb_bool mrb_equal (mrb_state* mrb, mrb_value obj1, mrb_value obj2); 229 mrb_value mrb_convert_to_integer (mrb_state* mrb, mrb_value val, int base); 230 mrb_value mrb_Integer (mrb_state* mrb, mrb_value val); 231 mrb_value mrb_Float (mrb_state* mrb, mrb_value val); 232 mrb_value mrb_inspect (mrb_state* mrb, mrb_value obj); 233 mrb_bool mrb_eql (mrb_state* mrb, mrb_value obj1, mrb_value obj2); 234 void mrb_garbage_collect (mrb_state*); 235 void mrb_full_gc (mrb_state*); 236 void mrb_incremental_gc (mrb_state*); 237 int mrb_gc_arena_save (mrb_state*); 238 void mrb_gc_arena_restore (mrb_state*, int); 239 void mrb_gc_mark (mrb_state*, RBasic*); 240 void mrb_field_write_barrier (mrb_state*, RBasic*, RBasic*); 241 void mrb_write_barrier (mrb_state*, RBasic*); 242 mrb_value mrb_check_convert_type (mrb_state* mrb, mrb_value val, mrb_vtype type, const(char)* tname, const(char)* method); 243 mrb_value mrb_any_to_s (mrb_state* mrb, mrb_value obj); 244 const(char)* mrb_obj_classname (mrb_state* mrb, mrb_value obj); 245 RClass* mrb_obj_class (mrb_state* mrb, mrb_value obj); 246 mrb_value mrb_class_path (mrb_state* mrb, RClass* c); 247 mrb_value mrb_convert_type (mrb_state* mrb, mrb_value val, mrb_vtype type, const(char)* tname, const(char)* method); 248 mrb_bool mrb_obj_is_kind_of (mrb_state* mrb, mrb_value obj, RClass* c); 249 mrb_value mrb_obj_inspect (mrb_state* mrb, mrb_value self); 250 mrb_value mrb_obj_clone (mrb_state* mrb, mrb_value self); 251 mrb_value mrb_exc_new (mrb_state* mrb, RClass* c, const(char)* ptr, c_long len); 252 void mrb_exc_raise (mrb_state* mrb, mrb_value exc); 253 void mrb_raise (mrb_state* mrb, RClass* c, const(char)* msg); 254 void mrb_raisef (mrb_state* mrb, RClass* c, const(char)* fmt, ...); 255 void mrb_name_error (mrb_state* mrb, mrb_sym id, const(char)* fmt, ...); 256 void mrb_warn (mrb_state* mrb, const(char)* fmt, ...); 257 void mrb_bug (mrb_state* mrb, const(char)* fmt, ...); 258 void mrb_print_backtrace (mrb_state* mrb); 259 void mrb_print_error (mrb_state* mrb); 260 mrb_value mrb_yield (mrb_state* mrb, mrb_value b, mrb_value arg); 261 mrb_value mrb_yield_argv (mrb_state* mrb, mrb_value b, mrb_int argc, const(mrb_value)* argv); 262 mrb_value mrb_yield_with_class (mrb_state* mrb, mrb_value b, mrb_int argc, const(mrb_value)* argv, mrb_value self, RClass* c); 263 void mrb_gc_protect (mrb_state* mrb, mrb_value obj); 264 mrb_value mrb_to_int (mrb_state* mrb, mrb_value val); 265 void mrb_check_type (mrb_state* mrb, mrb_value x, mrb_vtype t); 266 void mrb_define_alias (mrb_state* mrb, RClass* klass, const(char)* name1, const(char)* name2); 267 const(char)* mrb_class_name (mrb_state* mrb, RClass* klass); 268 void mrb_define_global_const (mrb_state* mrb, const(char)* name, mrb_value val); 269 mrb_value mrb_attr_get (mrb_state* mrb, mrb_value obj, mrb_sym id); 270 mrb_bool mrb_respond_to (mrb_state* mrb, mrb_value obj, mrb_sym mid); 271 mrb_bool mrb_obj_is_instance_of (mrb_state* mrb, mrb_value obj, RClass* c); 272 mrb_value mrb_fiber_resume (mrb_state* mrb, mrb_value fib, mrb_int argc, const(mrb_value)* argv); 273 mrb_value mrb_fiber_yield (mrb_state* mrb, mrb_int argc, const(mrb_value)* argv); 274 mrb_pool* mrb_pool_open (mrb_state*); 275 void mrb_pool_close (mrb_pool*); 276 void* mrb_pool_alloc (mrb_pool*, size_t); 277 void* mrb_pool_realloc (mrb_pool*, void*, size_t oldlen, size_t newlen); 278 mrb_bool mrb_pool_can_realloc (mrb_pool*, void*, size_t); 279 void* mrb_alloca (mrb_state* mrb, size_t); 280 void mrb_state_atexit (mrb_state* mrb, mrb_atexit_func func); 281 void mrb_show_version (mrb_state* mrb); 282 void mrb_show_copyright (mrb_state* mrb); 283 mrb_value mrb_format (mrb_state* mrb, const(char)* format, ...);